package io.openmessaging.map;

/**
 * 相当于 topicId、queueId、offset 的联合索引
 * 由 TopicQueueMap 和 OffsetMap 组合而成
 */
public class TopicQueueOffsetMap<E> {
    private final TopicQueueMap<OffsetMap<E>> topicQueueMap;

    public TopicQueueOffsetMap() {
        topicQueueMap = new TopicQueueMap(OffsetMap.class);
    }

    public E set(int topicId, int queueId, long offset, E e) {
        OffsetMap<E> queue = topicQueueMap.computeIfAbsent(topicId, queueId, OffsetMap::new);
        return queue.set(offset, e);
    }

    public E get(int topicId, int queueId, long offset) {
        OffsetMap<E> queue = topicQueueMap.get(topicId, queueId);
        return queue == null ? null : queue.get(offset);
    }
}
